// RAP [rh] AboutDialog left out for now ///******************************************************************************* // * Copyright (c) 2000, 2010 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ //package org.eclipse.ui.internal.dialogs; // //import java.util.ArrayList; //import java.util.LinkedList; //import org.eclipse.core.runtime.IBundleGroup; //import org.eclipse.core.runtime.IBundleGroupProvider; //import org.eclipse.core.runtime.IProduct; //import org.eclipse.core.runtime.Platform; //import org.eclipse.jface.action.MenuManager; //import org.eclipse.jface.dialogs.IDialogConstants; //import org.eclipse.jface.dialogs.TrayDialog; //import org.eclipse.jface.resource.ImageDescriptor; //import org.eclipse.jface.resource.JFaceColors; //import org.eclipse.osgi.util.NLS; //import org.eclipse.swt.SWT; //import org.eclipse.swt.accessibility.AccessibleAdapter; //import org.eclipse.swt.accessibility.AccessibleEvent; //import org.eclipse.swt.custom.BusyIndicator; //import org.eclipse.swt.custom.ScrolledComposite; //import org.eclipse.swt.custom.StyledText; //import org.eclipse.swt.events.ControlAdapter; //import org.eclipse.swt.events.ControlEvent; //import org.eclipse.swt.events.DisposeEvent; //import org.eclipse.swt.events.DisposeListener; //import org.eclipse.swt.events.SelectionAdapter; //import org.eclipse.swt.events.SelectionEvent; //import org.eclipse.swt.graphics.Color; //import org.eclipse.swt.graphics.GC; //import org.eclipse.swt.graphics.Image; //import org.eclipse.swt.graphics.Point; //import org.eclipse.swt.layout.GridData; //import org.eclipse.swt.layout.GridLayout; //import org.eclipse.swt.layout.RowLayout; //import org.eclipse.swt.widgets.Button; //import org.eclipse.swt.widgets.Composite; //import org.eclipse.swt.widgets.Control; //import org.eclipse.swt.widgets.Label; //import org.eclipse.swt.widgets.Shell; //import org.eclipse.ui.IWorkbenchCommandConstants; //import org.eclipse.ui.IWorkbenchWindow; //import org.eclipse.ui.PlatformUI; //import org.eclipse.ui.internal.IWorkbenchHelpContextIds; //import org.eclipse.ui.internal.ProductProperties; //import org.eclipse.ui.internal.WorkbenchMessages; //import org.eclipse.ui.internal.about.AboutBundleGroupData; //import org.eclipse.ui.internal.about.AboutFeaturesButtonManager; //import org.eclipse.ui.internal.about.AboutItem; //import org.eclipse.ui.internal.about.AboutTextManager; //import org.eclipse.ui.internal.about.InstallationDialog; //import org.eclipse.ui.menus.CommandContributionItem; //import org.eclipse.ui.menus.CommandContributionItemParameter; // ///** // * Displays information about the product. // */ //public class AboutDialog extends TrayDialog { // private final static int MAX_IMAGE_WIDTH_FOR_TEXT = 250; // // private final static int DETAILS_ID = IDialogConstants.CLIENT_ID + 1; // // private String productName; // // private IProduct product; // // private AboutBundleGroupData[] bundleGroupInfos; // // private ArrayList images = new ArrayList(); // // private AboutFeaturesButtonManager buttonManager = new AboutFeaturesButtonManager(); // // private StyledText text; // // private AboutTextManager aboutTextManager; // // /** // * Create an instance of the AboutDialog for the given window. // * @param parentShell The parent of the dialog. // */ // public AboutDialog(Shell parentShell) { // super(parentShell); // // product = Platform.getProduct(); // if (product != null) { // productName = product.getName(); // } // if (productName == null) { // productName = WorkbenchMessages.AboutDialog_defaultProductName; // } // // // create a descriptive object for each BundleGroup // IBundleGroupProvider[] providers = Platform.getBundleGroupProviders(); // LinkedList groups = new LinkedList(); // if (providers != null) { // for (int i = 0; i < providers.length; ++i) { // IBundleGroup[] bundleGroups = providers[i].getBundleGroups(); // for (int j = 0; j < bundleGroups.length; ++j) { // groups.add(new AboutBundleGroupData(bundleGroups[j])); // } // } // } // bundleGroupInfos = (AboutBundleGroupData[]) groups // .toArray(new AboutBundleGroupData[0]); // } // // /* // * (non-Javadoc) Method declared on Dialog. // */ // protected void buttonPressed(int buttonId) { // switch (buttonId) { // case DETAILS_ID: // BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() { // public void run() { // IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); // InstallationDialog dialog = new InstallationDialog(getShell(), workbenchWindow); // dialog.setModalParent(AboutDialog.this); // dialog.open(); // } // }); // break; // default: // super.buttonPressed(buttonId); // break; // } // } // // public boolean close() { // // dispose all images // for (int i = 0; i < images.size(); ++i) { // Image image = (Image) images.get(i); // image.dispose(); // } // // return super.close(); // } // // /* // * (non-Javadoc) Method declared on Window. // */ // protected void configureShell(Shell newShell) { // super.configureShell(newShell); // newShell.setText(NLS.bind(WorkbenchMessages.AboutDialog_shellTitle,productName )); // PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, // IWorkbenchHelpContextIds.ABOUT_DIALOG); // } // // /** // * Add buttons to the dialog's button bar. // * // * Subclasses should override. // * // * @param parent // * the button bar composite // */ // protected void createButtonsForButtonBar(Composite parent) { // parent.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // // createButton(parent, DETAILS_ID, WorkbenchMessages.AboutDialog_DetailsButton, false); // // Label l = new Label(parent, SWT.NONE); // l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // GridLayout layout = (GridLayout) parent.getLayout(); // layout.numColumns++; // layout.makeColumnsEqualWidth = false; // // Button b = createButton(parent, IDialogConstants.OK_ID, // IDialogConstants.OK_LABEL, true); // b.setFocus(); // } // // /** // * Creates and returns the contents of the upper part // * of the dialog (above the button bar). // * // * Subclasses should overide. // * // * @param parent the parent composite to contain the dialog area // * @return the dialog area control // */ // protected Control createDialogArea(Composite parent) { // // brand the about box if there is product info // Image aboutImage = null; // AboutItem item = null; // if (product != null) { // ImageDescriptor imageDescriptor = ProductProperties // .getAboutImage(product); // if (imageDescriptor != null) { // aboutImage = imageDescriptor.createImage(); // } // // // if the about image is small enough, then show the text // if (aboutImage == null // || aboutImage.getBounds().width <= MAX_IMAGE_WIDTH_FOR_TEXT) { // String aboutText = ProductProperties.getAboutText(product); // if (aboutText != null) { // item = AboutTextManager.scan(aboutText); // } // } // // if (aboutImage != null) { // images.add(aboutImage); // } // } // // // create a composite which is the parent of the top area and the bottom // // button bar, this allows there to be a second child of this composite with // // a banner background on top but not have on the bottom // Composite workArea = new Composite(parent, SWT.NONE); // GridLayout workLayout = new GridLayout(); // workLayout.marginHeight = 0; // workLayout.marginWidth = 0; // workLayout.verticalSpacing = 0; // workLayout.horizontalSpacing = 0; // workArea.setLayout(workLayout); // workArea.setLayoutData(new GridData(GridData.FILL_BOTH)); // // // page group // Color background = JFaceColors.getBannerBackground(parent.getDisplay()); // Color foreground = JFaceColors.getBannerForeground(parent.getDisplay()); // Composite top = (Composite) super.createDialogArea(workArea); // // // override any layout inherited from createDialogArea // GridLayout layout = new GridLayout(); // layout.marginHeight = 0; // layout.marginWidth = 0; // layout.verticalSpacing = 0; // layout.horizontalSpacing = 0; // top.setLayout(layout); // top.setLayoutData(new GridData(GridData.FILL_BOTH)); // top.setBackground(background); // top.setForeground(foreground); // // // the image & text // final Composite topContainer = new Composite(top, SWT.NONE); // topContainer.setBackground(background); // topContainer.setForeground(foreground); // // layout = new GridLayout(); // layout.numColumns = (aboutImage == null || item == null ? 1 : 2); // layout.marginWidth = 0; // layout.marginHeight = 0; // layout.verticalSpacing = 0; // layout.horizontalSpacing = 0; // topContainer.setLayout(layout); // // // // Calculate a good height for the text // GC gc = new GC(parent); // int lineHeight = gc.getFontMetrics().getHeight(); // gc.dispose(); // // int topContainerHeightHint = 100; // // topContainerHeightHint = Math.max(topContainerHeightHint, lineHeight * 6); // // //image on left side of dialog // if (aboutImage != null) { // Label imageLabel = new Label(topContainer, SWT.NONE); // imageLabel.setBackground(background); // imageLabel.setForeground(foreground); // // GridData data = new GridData(); // data.horizontalAlignment = GridData.FILL; // data.verticalAlignment = GridData.BEGINNING; // data.grabExcessHorizontalSpace = false; // imageLabel.setLayoutData(data); // imageLabel.setImage(aboutImage); // topContainerHeightHint = Math.max(topContainerHeightHint, aboutImage.getBounds().height); // } // // GridData data = new GridData(); // data.horizontalAlignment = GridData.FILL; // data.verticalAlignment = GridData.FILL; // data.grabExcessHorizontalSpace = true; // data.grabExcessVerticalSpace = true; // data.heightHint = topContainerHeightHint; // topContainer.setLayoutData(data); // // if (item != null) { // final int minWidth = 432; // // This value should really be calculated // // from the computeSize(SWT.DEFAULT, // // SWT.DEFAULT) of all the // // children in infoArea excluding the // // wrapped styled text // // There is no easy way to do this. // // // A scrolled composite is used instead of a vertical scroll bar on // // the styled text, because styled text does not automatically // // remove the vertical bar when not needed. // final ScrolledComposite scroller = new ScrolledComposite(topContainer, // SWT.V_SCROLL | SWT.H_SCROLL); // data = new GridData(GridData.FILL_BOTH); // data.widthHint = minWidth; // scroller.setLayoutData(data); // // final Composite textComposite = new Composite(scroller, SWT.NONE); // textComposite.setBackground(background); // // layout = new GridLayout(); // textComposite.setLayout(layout); // // text = new StyledText(textComposite, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY); // // // Don't set caret to 'null' as this causes https://bugs.eclipse.org/293263. //// text.setCaret(null); // // text.setFont(parent.getFont()); // text.setText(item.getText()); // text.setCursor(null); // text.setBackground(background); // text.setForeground(foreground); // // aboutTextManager = new AboutTextManager(text); // aboutTextManager.setItem(item); // // createTextMenu(); // // GridData gd = new GridData(); // gd.verticalAlignment = GridData.BEGINNING; // gd.horizontalAlignment = GridData.FILL; // gd.grabExcessHorizontalSpace = true; // text.setLayoutData(gd); // // // Adjust the scrollbar increments // scroller.getHorizontalBar().setIncrement(20); // scroller.getVerticalBar().setIncrement(20); // // final boolean[] inresize = new boolean[1]; // flag to stop unneccesary // // recursion // textComposite.addControlListener(new ControlAdapter() { // public void controlResized(ControlEvent e) { // if (inresize[0]) // return; // inresize[0] = true; // // required because of bugzilla report 4579 // textComposite.layout(true); // // required because you want to change the height that the // // scrollbar will scroll over when the width changes. // int width = textComposite.getClientArea().width; // Point p = textComposite.computeSize(width, SWT.DEFAULT); // scroller.setMinSize(minWidth, p.y); // inresize[0] = false; // } // }); // // scroller.setExpandHorizontal(true); // scroller.setExpandVertical(true); // Point p = textComposite.computeSize(minWidth, SWT.DEFAULT); // textComposite.setSize(p.x, p.y); // scroller.setMinWidth(minWidth); // scroller.setMinHeight(p.y); // // scroller.setContent(textComposite); // } // // // horizontal bar // Label bar = new Label(workArea, SWT.HORIZONTAL | SWT.SEPARATOR); // data = new GridData(); // data.horizontalAlignment = GridData.FILL; // bar.setLayoutData(data); // // // add image buttons for bundle groups that have them // Composite bottom = (Composite) super.createDialogArea(workArea); // // override any layout inherited from createDialogArea // layout = new GridLayout(); // bottom.setLayout(layout); // data = new GridData(); // data.horizontalAlignment = SWT.FILL; // data.verticalAlignment = SWT.FILL; // data.grabExcessHorizontalSpace = true; // // bottom.setLayoutData(data); // // createFeatureImageButtonRow(bottom); // // // spacer // bar = new Label(bottom, SWT.NONE); // data = new GridData(); // data.horizontalAlignment = GridData.FILL; // bar.setLayoutData(data); // // return workArea; // } // // /** // * Create the context menu for the text widget. // * // * @since 3.4 // */ // private void createTextMenu() { // final MenuManager textManager = new MenuManager(); // textManager.add(new CommandContributionItem( // new CommandContributionItemParameter(PlatformUI // .getWorkbench(), null, IWorkbenchCommandConstants.EDIT_COPY, // CommandContributionItem.STYLE_PUSH))); // textManager.add(new CommandContributionItem( // new CommandContributionItemParameter(PlatformUI // .getWorkbench(), null, IWorkbenchCommandConstants.EDIT_SELECT_ALL, // CommandContributionItem.STYLE_PUSH))); // text.setMenu(textManager.createContextMenu(text)); // text.addDisposeListener(new DisposeListener() { // // public void widgetDisposed(DisposeEvent e) { // textManager.dispose(); // } // }); // // } // // private void createFeatureImageButtonRow(Composite parent) { // Composite featureContainer = new Composite(parent, SWT.NONE); // RowLayout rowLayout = new RowLayout(); // rowLayout.wrap = true; // featureContainer.setLayout(rowLayout); // GridData data = new GridData(); // data.horizontalAlignment = GridData.FILL; // featureContainer.setLayoutData(data); // // for (int i = 0; i < bundleGroupInfos.length; i++) { // createFeatureButton(featureContainer, bundleGroupInfos[i]); // } // } // // private Button createFeatureButton(Composite parent, // final AboutBundleGroupData info) { // if (!buttonManager.add(info)) { // return null; // } // // ImageDescriptor desc = info.getFeatureImage(); // Image featureImage = null; // // Button button = new Button(parent, SWT.FLAT | SWT.PUSH); // button.setData(info); // featureImage = desc.createImage(); // images.add(featureImage); // button.setImage(featureImage); // button.setToolTipText(info.getProviderName()); // // button.getAccessible().addAccessibleListener(new AccessibleAdapter(){ // /* (non-Javadoc) // * @see org.eclipse.swt.accessibility.AccessibleAdapter#getName(org.eclipse.swt.accessibility.AccessibleEvent) // */ // public void getName(AccessibleEvent e) { // e.result = info.getProviderName(); // } // }); // button.addSelectionListener(new SelectionAdapter() { // public void widgetSelected(SelectionEvent event) { // AboutBundleGroupData[] groupInfos = buttonManager // .getRelatedInfos(info); // AboutBundleGroupData selection = (AboutBundleGroupData) event.widget // .getData(); // // AboutFeaturesDialog d = new AboutFeaturesDialog(getShell(), // productName, groupInfos, selection); // d.open(); // } // }); // // return button; // } // // /* // * (non-Javadoc) // * // * @see org.eclipse.jface.dialogs.Dialog#isResizable() // */ // protected boolean isResizable() { // return true; // } //}